﻿
/**//**
 * Copyright 2004-2005 The Apache Software Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
using System;
using System.Collections;
using System.IO;

using Lucene.Net.Analysis;

namespace Lucene.Net.Analysis.CJK
{
    /**//**
     * Filters CJKTokenizer with StopFilter.
     *
     * @author Che, Dong
     */
    public class CJKAnalyzer:Analyzer 
    {
        //~ Static fields/initializers ---------------------------------------------

        /**//**
         * An array containing some common English words that are not usually
         * useful for searching and some double-byte interpunctions.
         */
        public  static string[] STOP_WORDS = {
                                                 "a", "and", "are", "as", "at", "be",
                                                 "but", "by", "for", "if", "in",
                                                 "into", "is", "it", "no", "not",
                                                 "of", "on", "or", "s", "such", "t",
                                                 "that", "the", "their", "then",
                                                 "there", "these", "they", "this",
                                                 "to", "was", "will", "with", "",
                                                 "www"
                                             };

        //~ Instance fields --------------------------------------------------------

        /**//**
         * stop word list
         */
        private Hashtable stopTable;

        //~ Constructors -----------------------------------------------------------

        /**//**
         * Builds an analyzer which removes words in {@link #STOP_WORDS}.
         */
        public CJKAnalyzer() 
        {
            stopTable = StopFilter.MakeStopSet(STOP_WORDS);
        }

        /**//**
         * Builds an analyzer which removes words in the provided array.
         *
         * @param stopWords stop word array
         */
        public CJKAnalyzer(string[] stopWords) 
        {
            stopTable = StopFilter.MakeStopSet(stopWords);
        }

        //~ Methods ----------------------------------------------------------------

        /**//**
         * get token stream from input
         *
         * @param fieldName lucene field name
         * @param reader    input reader
         * @return TokenStream
         */
        public override TokenStream TokenStream(string fieldName, TextReader reader) 
        {
            TokenStream ts=new CJKTokenizer(reader);
            return new StopFilter(ts, stopTable);
            //return new StopFilter(new CJKTokenizer(reader), stopTable);
        }
    }
}